package com.wzh.mysending.utils.loc;

import android.content.Context;
import android.util.Log;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;

/**
 * Created by Hu on 2017/1/23.
 */

public class LocationUtil implements AMapLocationListener {
    Context context;
    private AMapLocationClient mlocationClient;
    private  OnGetLocationChanged onGetLocationChanged;


    public LocationUtil(Context context,OnGetLocationChanged onGetLocationChanged) {
        this.context = context;
        this.onGetLocationChanged=onGetLocationChanged;
        //初始化定位参数
        initLocation();
    }

    //定位
    private void initLocation() {
        //初始化client
        mlocationClient = new AMapLocationClient(context);
        // 设置定位监听
        mlocationClient.setLocationListener(this);
        //定位参
        //设置定位参数
        mlocationClient.setLocationOption(getDefaultOption());
    }
    /**
     * 默认的定位参数
     *
     * @author hongming.wang
     * @since 2.8.0
     */
    private AMapLocationClientOption getDefaultOption() {
        AMapLocationClientOption mOption = new AMapLocationClientOption();
        mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选，设置定位模式，可选的模式有高精度、仅设备、仅网络。默认为高精度模式
        mOption.setGpsFirst(false);//可选，设置是否gps优先，只在高精度模式下有效。默认关闭
        mOption.setHttpTimeOut(30000);//可选，设置网络请求超时时间。默认为30秒。在仅设备模式下无效
//        mOption.setInterval(60000);//可选，设置定位间隔。默认为2秒
        mOption.setInterval(60000);//可选，设置定位间隔。默认为2秒
        mOption.setNeedAddress(true);//可选，设置是否返回逆地理地址信息。默认是true
        mOption.setOnceLocation(false);//可选，设置是否单次定位。默认是false
        mOption.setOnceLocationLatest(false);//可选，设置是否等待wifi刷新，默认为false.如果设置为true,会自动变为单次定位，持续定位时不要使用
        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选， 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
        mOption.setSensorEnable(false);//可选，设置是否使用传感器。默认是false
        mOption.setWifiScan(true); //可选，设置是否开启wifi扫描。默认为true，如果设置为false会同时停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
        mOption.setLocationCacheEnable(true); //可选，设置是否使用缓存定位，默认为true
        return mOption;
    }
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {

        if (amapLocation != null) {
            if (amapLocation.getErrorCode() == 0) {
                //定位成功回调信息，设置相关消息
                onGetLocationChanged.onLocationOk(amapLocation);
            } else {
                //显示错误信息ErrCode是错误码，errInfo是错误信息，详见错误码表。
                onGetLocationChanged.onLocationError(amapLocation);
            }
        }else {
            onGetLocationChanged.onLocationNull(amapLocation);
        }


    }
    /**
     * 开始定位
     */
    public void startLocation(){

        // 启动定位
        mlocationClient.startLocation();
        Log.e("startLocation===","startLocation");
    }
    /**
     * 停止定位
     */
    public void stopLocation() {
        // 停止定位
        Log.e("stopLocation===","startLocation");
        mlocationClient.stopLocation();
    }

    /**
     * 销毁定位
     */
    public void destroyLocation() {
        if (null != mlocationClient) {
            mlocationClient.stopLocation();
            /**
             * 如果AMapLocationClient是在当前Activity实例化的，
             * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
             */
            mlocationClient.onDestroy();
            mlocationClient = null;
            mlocationClient = null;
        }
    }
}
